#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    int fd;
    int ret;
    off_t off;
    char buffer[1024];
    int i;
    /* 打开文件 */
    fd = open("./hole_file", O_WRONLY | O_CREAT | O_EXCL,
                             S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
    if (-1 == fd) {
        perror("open error");
        exit(-1);
    }
    /* 将文件读写位置移动到偏移文件头4096个字节（4K）处 */
    ret = lseek(fd, 4096, SEEK_SET);
    if (-1 == ret) {
        perror("lseek error");
        goto err;
    }
    /* 初始化 buffer为 0xFF */
    memset(buffer, 0xFF, sizeof(buffer));
    /* 循环写入4次，每次写入 1K */
    for(i = 0; i < 4; i++) {
        ret = write(fd, buffer, sizeof(buffer));
        if (-1 == ret) {
            perror("write error");
            goto err;
        }
    }
    /* 获取当前读写偏移量 */
    off = lseek(fd, 0, SEEK_CUR);
    printf("offset: %ld\r\n", off);

    ret = 0;
err:
    /* 关闭文件 */
    close(fd);
    exit(ret);
}